Welcome to pandas!

5.6 时间序列差创建与转换

1、时间差序列创建

时间差序列,可以理解为将多个时间差数据组在一个可迭代对象中,可以使用pd.timedelta_range()函数生成


import pandas as pd

t1=pd.timedelta_range( "2D","4D" ) #1、创建指定范围时间差序列

t2=pd.timedelta_range( "2D" , periods = 5 ) #2、创建指定范围个数时间差序列

t3=pd.timedelta_range( "2D" , periods = 5 , freq = "2D" ) #3、创建指定频率时间差序列

t4=pd.timedelta_range( "1D","20D" , freq = "4D" ) #3、创建指定频率个数时间差序列

print (t1)

print (t2)

print (t3)

print (t4)

返回:

TimedeltaIndex(['2 days', '3 days', '4 days'], dtype='timedelta64[ns]', freq='D')

TimedeltaIndex(['2 days', '3 days', '4 days', '5 days', '6 days'], dtype='timedelta64[ns]', freq='D')

TimedeltaIndex(['2 days', '4 days', '6 days', '8 days', '10 days'], dtype='timedelta64[ns]', freq='2D')

TimedeltaIndex(['1 days', '5 days', '9 days', '13 days', '17 days'], dtype='timedelta64[ns]', freq='4D')


2、时间差序列转换

1)多个时间差生成时间差序列

如将一组无规则的时间差字符串生成标准的时间差序列,则可以使用pd.TimedeltaIndex()

函数和pd.to_timedelta()函数

import pandas as pd

l=[ "1days","2D3h40s","1W1D23T" ]

t1=pd.to_timedelta(l)

t2=pd.TimedeltaIndex(l)

print (t1)

print (t2)

返回:

TimedeltaIndex(['1 days 00:00:00', '2 days 03:00:40', '8 days 00:23:00'], dtype='timedelta64[ns]', freq=None)

TimedeltaIndex(['1 days 00:00:00', '2 days 03:00:40', '8 days 00:23:00'], dtype='timedelta64[ns]', freq=None)

2)将纯数字生成时间差序列

可以同上面的函数将纯数字生成时间差序列,但需要设置数定的单位,也就是指定unit参数。


import pandas as pd

l=[ 4,1.87,120 ]

t1=pd.to_timedelta(l, unit = "D" ) #如果不指定则会默认为毫秒

t2=pd.TimedeltaIndex(l, unit = "W" )

print (t1)

print (t2)

返回:

TimedeltaIndex(['4 days 00:00:00', '1 days 20:52:48', '120 days 00:00:00'], dtype='timedelta64[ns]', freq=None)

TimedeltaIndex(['28 days 00:00:00', '13 days 02:09:36', '840 days 00:00:00'], dtype='timedelta64[ns]', freq=None)


3)时间戳运算生成时间差序列

两个时间相减得到的是时间差,转换时间戳序列得到的则是时间差序列

import pandas as pd

l1=pd.to_datetime([ "2021-03-01 12:34:17","2020-05-16 15:12:15" ]) # 时间戳序列

l2=pd.to_datetime([ "2021-02-26 11:30:10","2020-05-05 23:10:08" ])

print (l1-l2)

返回:

TimedeltaIndex(['3 days 01:04:07', '10 days 16:02:07'], dtype='timedelta64[ns]', freq=None)